package com.fourWork.workFour;

import java.io.*;
import java.net.Socket;
import java.util.Scanner;
/**
 *  使用基于 tcp 协议的编程模型实现将 UserMessage 类型对象由客户端发送给服务器；
 *
 *   服务器接收到对象后判断用户对象信息是否为 "admin"和"123456"，
 *   若是,则将 UserMessage 对象中的类型改为"success"，否则将类型改为"fail"并回发给客户端，
 *   客户端接收到服务器发来的对象后判断并给出登录成功或者失败的提示。
 *
 *   其中 UserMessage 类的特征有：类型(字符串类型) 和 用户对象(User 类型)。
 *
 *   其中 User 类的特征有：用户名、密码(字符串类型)。
 *
 *   如：
 *
 *       UserMessage tum = new UserMessage("check", new User("admin", "123456"));
 */

/**
 * 客户端
 */
public class TestFourClient {
    public static void main(String[] args) {
        Socket socket = null;
        Scanner scanner = null;
        PrintStream printStream = null;
        BufferedReader bufferedReader = null;
        UserMessage userMessage=null;
        //客户端：
        //（1）创建Socket类型的对象并提供服务器的IP地址和端口号；
        try {
            socket = new Socket("127.0.0.1", 8888);
            System.out.println("连接服务器成功");
            //（2）使用输入输出流进行通信；
            scanner = new Scanner(System.in);
            //OutputStream getOutputStream() 用于获取当前套接字的输出流
            printStream = new PrintStream(socket.getOutputStream());
            //InputStream getInputStream() 用于获取当前套接字的输入流
            bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            while(true){
                //实现客户端发送的内容由用于从键盘输入
                System.out.println("请输入要发送的用户：");
                String user = scanner.next();
                System.out.println("请输入要发送的密码：");
                String passwd = scanner.next();

                userMessage=new UserMessage("check",new User(user,passwd));
                //实现客户端向服务器发送字符串内容
                printStream.println(userMessage);
                System.out.println("客户端发送数据内容成功！");
                //实现接收服务器发来的字符串内容并打印
                String s = bufferedReader.readLine();
                System.out.println("服务器回发的消息为："+s);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //（3）关闭Socket；
            if (null != socket) {
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }

}
